import { defineConfig, globalIgnores } from 'eslint/config'
import globals from 'globals'
import js from '@eslint/js'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'

export default defineConfig([
  { files: ['**/*.{js,mjs,cjs,ts,vue}'] }, //指定检查的文件类型
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    languageOptions: { globals: globals.browser },
  },
  //plugins 属性用于指定要使用的 ESLint 插件，这里使用了 js 插件。
  //extends 属性用于指定要继承的配置文件，这里继承了 js/recommended 配置，这是一个推荐的 JavaScript 配置。
  {
    files: ['**/*.{js,mjs,cjs,ts,vue}'],
    plugins: { js },
    extends: ['js/recommended'],
  },
  tseslint.configs.recommended, //导入tslint的推荐配置
  pluginVue.configs['flat/recommended'], //插件
  {
    files: ['**/*.vue'],
    languageOptions: { parserOptions: { parser: tseslint.parser } },
  }, //解析器

  globalIgnores(['.config/*']), //忽略文件
  globalIgnores(['.config/', 'dist/', 'node_modules/']), //忽略目录
  {
    rules: {
      'no-unused-vars': 'warn',
      'no-undef': 'warn',
      //eslint(https://eslint.bootcss.com/docs/rules/)
      'no-var': 'error', //要求使用let或const而不是var
      'no-multiple-empty-lines': ['warn', { max: 1 }], //禁止出现多行空行
      'no-console': process.env.NODE_ENV === 'production' ? 'error' : 'off', //生产环境禁止使用console
      'no-debugger': process.env.NODE_ENV === 'production' ? 'error' : 'off', //生产环境禁止使用debugger
      'no-unexpected-multiline': 'error', //禁止意外出现多行
      'no-useless-escape': 'off', //禁用不必要的转义字符

      //typeScript(https://typescript-eslint.io/rules/)
      '@typescript-eslint/no-unused-vars': 'error', //禁止定义未使用的变量
      '@typescript-eslint/prefer-ts-expect-error': 'error', //禁止使用ts-ignore
      '@typescript-eslint/no-explicit-any': 'off', //禁止使用any类型
      '@typescript-eslint/no-non-null-assertion': 'off', //禁止使用非空断言
      '@typescript-eslint/no-namespace': 'off', //禁止使用自定义typescript模块和命名空间
      '@typescript-eslint/semi': 'off', //禁止使用分号

      //eslint-plugin-vue(https://eslint.vuejs.org/rules/)
      'vue/multi-word-component-names': 'off', //组件名必须为多单词
      'vue/no-v-html': 'off', //禁止使用v-html
      // 'vue/script-setup-uses-vars': 'error',//在 <script setup> 中使用变量、函数等前必须先声明
      'vue/no-mutation-props': 'off', //禁止直接修改props
      'vue/attribute-hyphenation': 'off', //禁止属性名称使用连字符
    },
  },
])
